'''使用参数化定义接口测试用例
使用uinttest
1.导包
2.创建测试类
    2.1前置处理
    2.2后置处理
    2.3创建测试方法
'''
import json

#1.导包
import requests
import unittest
from tpshop.utils import PM1 #导入封装好的PyMsql工具类
from tpshop.api.login import loginAPI #导入封装的api包
from parameterized import parameterized

#构造数据
def build_data():
    #获取数据库的数据
    sql = "select * from t_login"
    db_data = PM1.exe_sql(sql)
    test_data = []
    for case_data in db_data:
        username = case_data[2] #从0开始计数所以对应表中的username位置就是2
        password = case_data[3]
        verify_code = case_data[4]
        content_type = case_data[5]
        status = case_data[6]
        msg = case_data[7]
        test_data.append((username, password, verify_code, content_type, status, msg))
        print(test_data)
    return test_data
#2.创建测试类
class Testlogin(unittest.TestCase):
    #2.1前置处理
    def setUp(self):
        self.login_api = loginAPI() #示例化接口类，方便使用self调用
        self.session = requests.Session() #创建session对象
    #2.2后置处理
    def tearDown(self):
        if self.session:
            self.session.close()  #关闭session对象

    @parameterized.expand(build_data())
    #2.3创建测试方法
    #登录
    def test001(self, username, password, verify_code, content_type, status, msg):
        #调用验证码接口获取验证，并进行断言
        respones1 = self.login_api.get_verify(self.session)
        self.assertIn(content_type, respones1.headers.get('Content-Type'))

        #调用登录接口获取登录信息，并进行断言
        respones2 = self.login_api.login(self.session, username, password, verify_code)
        print(respones2.json())
        self.assertEqual(status, respones2.json().get('status'))
        self.assertIn(msg, respones2.json().get('msg'))